﻿using System.Collections.Generic;
using System.Linq;
using Controller2.Models;

namespace Controller2.BLL
{
    public class TipoPessoaBll
    {
        public static TipoPessoa GetTipoPessoa(ControllerBDModelContainer db, int idTipoPessoa, int idPessoa = 0)
        {
            var tp = new TipoPessoa();
            if (idPessoa == 0)
            {
                tp = db.TipoPessoa.FirstOrDefault(t => t.IdTipoPessoa == idTipoPessoa);
            }
            else
            {
                tp = (from p in db.Pessoa
                      where p.IdPessoa == idPessoa
                      from t in p.TipoPessoa
                      select t).FirstOrDefault();
            }
            return tp;
        }

        public static TipoPessoa GetTipoPessoa(ControllerBDModelContainer db, string tipoPessoa)
        {
            var tp = db.TipoPessoa.Single(t => t.Tipo.Equals(tipoPessoa));
            return tp;
        }

        public static IEnumerable<TipoPessoa> GetAllTiposPessoa(ControllerBDModelContainer db)
        {
            var tp = from t in db.TipoPessoa
                     select t;
            return tp;
        }

        /// <summary>
        /// Faz o autocomplete do campo de texto de pesquisa
        /// </summary>
        /// <param name="db">Contexto de dados</param>
        /// <param name="filtro">Valor do filtro (combobox)</param>
        /// <param name="termoPesquisa">Termo da pesquisa (valor digitado)</param>
        /// <param name="numeroLinhas">Número de registros a serem mostrados</param>
        /// <returns></returns>
        public static IEnumerable<string> AutoComplete(ControllerBDModelContainer db, int filtro, string termoPesquisa, int numeroLinhas)
        {
            IEnumerable<string> resultado;
            int codigo = 0;
            if (filtro == 1)
            {
                if (!int.TryParse(termoPesquisa, out codigo))
                {
                    filtro = 2;
                }
            }
            switch (filtro)
            {
                default:
                    resultado = (from c in db.TipoPessoa.ToList()
                                 where c.IdTipoPessoa >= codigo
                                 select c.IdTipoPessoa.ToString()).Distinct();
                    break;
                case 2:
                    resultado = (from c in db.TipoPessoa
                                 where c.Tipo.Contains(termoPesquisa)
                                 select c.Tipo).Distinct();
                    break;
            }
            return resultado.Take(numeroLinhas);
        }
    }
}